package com.zapi.notification.service;

import com.zapi.notification.entity.Message;

import java.util.List;
import java.util.Map;

/**
 * 通知服务接口
 * 统一管理各种通知方式
 */
public interface NotificationService {

    /**
     * 发送站内信
     * @param message 消息对象
     * @return 是否发送成功
     */
    boolean sendStationMessage(Message message);

    /**
     * 批量发送站内信
     * @param messages 消息列表
     * @return 发送成功的消息数量
     */
    int sendBatchStationMessages(List<Message> messages);

    /**
     * 发送实时消息
     * @param userId 用户ID
     * @param message 消息内容
     * @return 是否发送成功
     */
    boolean sendRealTimeMessage(Long userId, String message);

    /**
     * 批量发送实时消息
     * @param userIds 用户ID列表
     * @param message 消息内容
     * @return 发送成功的用户数量
     */
    int sendBatchRealTimeMessages(List<Long> userIds, String message);

    /**
     * 发送短信
     * @param phoneNumber 手机号
     * @param templateCode 模板编码
     * @param params 模板参数
     * @return 是否发送成功
     */
    boolean sendSms(String phoneNumber, String templateCode, Map<String, Object> params);

    /**
     * 批量发送短信
     * @param phoneNumbers 手机号列表
     * @param templateCode 模板编码
     * @param params 模板参数
     * @return 发送成功的短信数量
     */
    int sendBatchSms(List<String> phoneNumbers, String templateCode, Map<String, Object> params);

    /**
     * 发送邮件
     * @param to 收件人邮箱
     * @param subject 邮件主题
     * @param content 邮件内容
     * @return 是否发送成功
     */
    boolean sendEmail(String to, String subject, String content);

    /**
     * 批量发送邮件
     * @param toList 收件人邮箱列表
     * @param subject 邮件主题
     * @param content 邮件内容
     * @return 发送成功的邮件数量
     */
    int sendBatchEmails(List<String> toList, String subject, String content);

    /**
     * 发送模板邮件
     * @param to 收件人邮箱
     * @param templateCode 模板编码
     * @param params 模板参数
     * @return 是否发送成功
     */
    boolean sendTemplateEmail(String to, String templateCode, Map<String, Object> params);

    /**
     * 广播系统消息
     * @param message 消息内容
     * @return 是否发送成功
     */
    boolean broadcastSystemMessage(String message);

    /**
     * 发送消息到用户组
     * @param groupId 用户组ID
     * @param message 消息内容
     * @return 是否发送成功
     */
    boolean sendToUserGroup(String groupId, String message);
} 